package com.wf.config;

import com.wf.quartz.*;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 定义任务描述和具体的执行时间
 */
@Configuration
public class QuartzConfig {

    /**
     * 配置房屋日浏览量更新任务的JobDetail
     *
     * @return JobDetail 返回配置好的JobDetail实例
     */
    @Bean
    public JobDetail dayViewDetail() {
        //指定任务描述具体的实现类
        return JobBuilder.newJob(DayViewQuartz.class)
                // 指定任务的名称
                .withIdentity("dayViewDetail")
                // 任务描述
                .withDescription("任务描述：房屋日浏览量更新")
                // 每次任务执行后进行存储
                .storeDurably()
                .build();
    }

    /**
     * 配置房屋日浏览量更新任务的Trigger
     *
     * @return Trigger 返回配置好的Trigger实例
     */
    @Bean
    public Trigger dayViewTrigger() {
        //每5分钟执行一次
        CronScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("0 0/5 * * * ? ");
        //创建触发器
        return TriggerBuilder.newTrigger()
                // 绑定工作任务
                .forJob(dayViewDetail())
                .withSchedule(schedule)
                .build();
    }

    /**
     * 配置房屋日浏览量更新任务的JobDetail
     *
     * @return JobDetail 返回配置好的JobDetail实例
     */
    @Bean
    public JobDetail collectDetail() {
        //指定任务描述具体的实现类
        return JobBuilder.newJob(CollectQuartz.class)
                // 指定任务的名称
                .withIdentity("collectDetail")
                // 任务描述
                .withDescription("任务描述：收藏数更新")
                // 每次任务执行后进行存储
                .storeDurably()
                .build();
    }

    /**
     * 配置房屋日浏览量更新任务的Trigger
     *
     * @return Trigger 返回配置好的Trigger实例
     */
    @Bean
    public Trigger collectTrigger() {
        //每5分钟执行一次
        CronScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("0 0/5 * * * ? ");
        //创建触发器
        return TriggerBuilder.newTrigger()
                // 绑定工作任务
                .forJob(dayViewDetail())
                .withSchedule(schedule)
                .build();
    }

    /**
     * 配置房屋总浏览量更新任务的JobDetail
     *
     * @return JobDetail 返回配置好的JobDetail实例
     */
    @Bean
    public JobDetail allViewDetail() {
        //指定任务描述具体的实现类
        return JobBuilder.newJob(AllViewQuartz.class)
                // 指定任务的名称
                .withIdentity("AllViewDetail")
                // 任务描述
                .withDescription("任务描述：房屋总浏览量更新")
                // 每次任务执行后进行存储
                .storeDurably()
                .build();
    }

    /**
     * 配置房屋总浏览量更新任务的Trigger
     *
     * @return Trigger 返回配置好的Trigger实例
     */
    @Bean
    public Trigger allViewTrigger() {
        // 每天凌晨2点执行
        CronScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("0 0 2 * * ? ");
        //创建触发器
        return TriggerBuilder.newTrigger()
                // 绑定工作任务
                .forJob(allViewDetail())
                .withSchedule(schedule)
                .build();
    }

    /**
     * 配置清除垃圾图片任务的JobDetail
     *
     * @return JobDetail 返回配置好的JobDetail实例
     */
    @Bean
    public JobDetail imageDetail() {
        //指定任务描述具体的实现类
        return JobBuilder.newJob(ImageQuartz.class)
                // 指定任务的名称
                .withIdentity("imageDetail")
                // 任务描述
                .withDescription("任务描述：清除垃圾图片")
                // 每次任务执行后进行存储
                .storeDurably()
                .build();
    }

    /**
     * 配置清除垃圾图片任务的Trigger
     *
     * @return Trigger 返回配置好的Trigger实例
     */
    @Bean
    public Trigger imageTrigger() {
        // 每天凌晨2点执行
        CronScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("0 0 2 * * ? ");
        //创建触发器
        return TriggerBuilder.newTrigger()
                // 绑定工作任务
                .forJob(imageDetail())
                .withSchedule(schedule)
                .build();
    }

    @Bean
    public JobDetail fileDetail() {
        //指定任务描述具体的实现类
        return JobBuilder.newJob(FileQuartz.class)
                // 指定任务的名称
                .withIdentity("fileDetail")
                // 任务描述
                .withDescription("任务描述：定时清理垃文件")
                // 每次任务执行后进行存储
                .storeDurably()
                .build();
    }


    @Bean
    public Trigger fileTrigger() {
        //每周一凌晨2点执行
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 2 ? * MON");
        //创建触发器
        return TriggerBuilder.newTrigger()
                // 绑定工作任务
                .forJob(fileDetail())
                .withSchedule(cronScheduleBuilder)
                .build();
    }
    /**
     * 配置清除垃圾图片任务的JobDetail
     *
     * @return JobDetail 返回配置好的JobDetail实例
     */
    @Bean
    public JobDetail sendEmailDetail() {
        //指定任务描述具体的实现类
        return JobBuilder.newJob(EmailQuartz.class)
                // 指定任务的名称
                .withIdentity("sendEmailDetail")
                // 任务描述
                .withDescription("任务描述：发送邮件")
                // 每次任务执行后进行存储
                .storeDurably()
                .build();
    }

    /**
     * 配置清除垃圾图片任务的Trigger
     *
     * @return Trigger 返回配置好的Trigger实例
     */
    @Bean
    public Trigger sendEmailTrigger() {
        // 每天21点执行

        SimpleScheduleBuilder schedule = SimpleScheduleBuilder.repeatHourlyForTotalCount(1,48);
        //创建触发器
        return TriggerBuilder.newTrigger()
                // 绑定工作任务
                .forJob(sendEmailDetail())
                .withSchedule(schedule)
                .build();
    }
}
